/**
 * @created by helin3 2018-04-16
 * @updated by
 * @description 入口配置文件转换
 */
/* global process, exports, __dirname */
/* eslint no-console: 0 */
var path = require('path');
var fs = require('fs');
var config = require('./getconf').config;
// var config = require('../config/config').config; // 打包公共配置文件

var argv = require('minimist')(process.argv.slice(2)); // 获取控制台命令参数
var buildTool = argv._[0] === 'dist'; // 是否编译打包工具

// yufp-build 打包工具所在目录路径
var yufpBuild = path.resolve(__dirname, '../..');
// 准备打包的工程目录路径
var srcRoot = '';
if (config.absoluteSdRoot) {
  srcRoot = config.srcRoot;
} else {
  srcRoot = path.resolve(yufpBuild, config.srcRoot);
}
if (!buildTool) {
  console.log('准备打包文件路径：' + srcRoot);
}
// 执行命令不是dist时，才执行打包目录创建
if (!fs.existsSync(srcRoot) && !buildTool) {
  throw new Error('准备打包的工程目录不存在！');
}
/**
 * 递归创建文件夹
 */
function mkdirs (dirpath) {
  if (!fs.existsSync(path.dirname(dirpath))) {
    mkdirs(path.dirname(dirpath));
  }
  fs.mkdirSync(dirpath);
}
// 打包生成的文件存放路径
var destRoot = path.resolve(yufpBuild, config.destRoot, config.app);
if (!fs.existsSync(destRoot)) {
  mkdirs(destRoot);
}
if (!buildTool) {
  console.log('打包生成文件路径：' + destRoot);
}

// 定义要导出的别名
var alias = {
  parallel: config.parallel, // dist 总任务是否并行执行
  sourceMap: config.sourceMap, // 是否生成sourcemap
  absoluteSdRoot: config.absoluteSdRoot, // srcRoot是否绝对路径, false则表示路径是相对于  xxx/yufp-build/
  yufpCoreMin: config.yufpCoreMin, // yufp-xxx.js是否启用压缩版
  buildMock: config.buildMock, // 是否将mock打包进行
  confTplPath: config.confTplPath,
  isPc: config.isPc, // 是否PC应用，否的话就是移动应用

  yufpBuild: yufpBuild, // yufp-build编译工具真实路径
  srcRoot: srcRoot, // 源工程路径(路径不能使用\，要不是/或者\\)
  destRoot: destRoot, // 工程编译后存储路径

  mock: config.mock, // mock目录
  app: config.app, // 应用名,war包名
  appName: config.appName, // 应用名,html title
  entry: config.entry, // 应用入口文件名
  lib: config.lib, // 依赖库目录
  theme: config.theme, // 主题目录
  custom: config.custom, // 自定义目录
  customMjs: config.customMjs, // 自定义目录需合并js （未包含其中的文件则不合并）
  customMcss: config.customMcss, // 自定义目录需合并css（未包含其中的文件则不合并）
  page: config.page, // 业务功能目录
  extra: config.extra, // 额外打包的目录
  pageExclude: config.pageExclude // 不编译的html
};

exports.alias = alias;
